跳到主要内容

32 TSN 内部温度传感器

在这里插入图片描述

开发板官网https://www.edevkit.com/)

本系列教程目录:


TSN 内部温度实验

本章目标:

  • 了解 RA6M5 处理器的 ADC 模块
  • 学会使用 RASC 配置 ADC 读取芯片内部温度。

硬件设计(略,参见配套硬件原理图)

软件设计

新建工程

复制一份 “07 SCI_UART_Recv_send” 修改文件夹名 “32 TSN_innerTemp”,双击打开 EBF_RA6M5.uvprojx 工程,通过 Keil 的新建文件新建 tsn.ctsn.h 保存到目录下的 \src 文件夹下。

FSP 配置

Keil 界面选择 “Tools”→“RA Smart Configurator” 打开 RASC 界面。

添加 ADC Stack 模块。

插图01

配置 ADC Stack 参数。

Module→Input→Channel Scan Mask,勾选 “Temperature Sensor”,

插图02

插图03

在 “RA6M5 Group User's Manual: Hardware” 手册 45 章温度计算说明。

插图04

配置完成之后可以按下快捷键"Ctrl + S"保存,最后点击 "Generate Project Content" 按钮,让软件自动生成配置代码即可。

程序设计

初始化 ADC 模块,在循环中读取内部温度通道的 ADC 值,结合手册公式换算成温度值并打印到串口。

程序编写

tsn.h 头文件定义初始化和读取函数。

#ifndef __BSP_TSN_H
#define __BSP_TSN_H

#include "hal_data.h"

void tsn_Init(void);
void read_tsn_value(void);

#endif

tsn.c 中实现初始化 ADC,读取内部温度 ADC 值并换算。

#include "tsn.h"

//ADC转换完成标志位
volatile bool scan_complete_flag = false;

//ADC转换完成中断
void tsn_callback(adc_callback_args_t * p_args)
{
FSP_PARAMETER_NOT_USED(p_args);
scan_complete_flag = true;
}

//ADC初始化
void tsn_Init(void)
{
fsp_err_t err;
err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
assert(FSP_SUCCESS == err);
}

//读取ADC数据并转换结果
void read_tsn_value(void)
{
uint16_t adc_data;
int32_t cal127;
adc_info_t adc_info;

(void)R_ADC_ScanStart(&g_adc0_ctrl);
while (!scan_complete_flag) //等待转换完成标志
{
;
}
scan_complete_flag = false; //重新清除标志位

// 读取通道0数据
R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_TEMPERATURE, &adc_data);

R_ADC_InfoGet(&g_adc0_ctrl, &adc_info);
cal127 = (int32_t) adc_info.calibration_data;
double slope = 4.0/1000;
double v1= 3.3 * cal127 / 4096;
double vs = 3.3 * adc_data /4096;
double temperature = (vs - v1) / slope + 127;
printf("CPU Temperature: %.1f\r\n", temperature);

}

hal_entry.c 文件中包含 tsn.h,循环中每秒读取温度值。

void hal_entry(void)
{
/* TODO: add your own code here */

led_Init(); // LED 初始化
uart0_Init();
tsn_Init();

printf("start tsn test\r\n");

while(1)
{
LED1_TOGGLE();
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS); //延时1秒

read_tsn_value();
}


#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}

下载验证

连接下载器,将程序编译并下载到开发板之后,按下复位按键来复位开发板,程序启动初始化完。

可以看到每秒打印温度值。

插图05